
#include <QMainWindow>
#include <QToolBar>
#include <QMenu>
#include <QAction>
#include <QMdiArea>
#include <QMenuBar>
#include <QFileDialog>
#include <QFile>
#include <QTextStream>
#include <QDir>
#include <QDropEvent>
#include <QDragEnterEvent>
#include <QUrl>

#include "QCVModuleHandler.h"
#include "QMyMdiArea.h"
#include "QAdwiceDialog.h"

/*
Cette classe est utilisée pour gerer une liste de Modules
*/
#ifndef QCVINTERFACE_H
#define QCVINTERFACE_H

/**
@class QCVInterface
@brief Fenêtre principale de l'application
*/
class QCVInterface:public QMainWindow
{
  Q_OBJECT
  public:
    QCVInterface();
    
		/**
		@brief Charger et ajouter un module 
		*/
    bool add_module(QString filename);
  
  public slots:
		/**
		@brief ouvre une boîte de dialogue pour ajouter un module
		*/
    void add_module();
		
		/**
		@brief supprime le module sélectionné
		*/
    void remove_module();
		
		/**
		@brief Chargement d'un fichier projet .cpro 
		*/
    void open_project();

		/**
		@brief Sauvegarde d'un fichier projet .cpro 
		*/
    void save_project();

		/**
		@brief fermeture du projet en cours
		*/
    void close_project();

		/**
		@brief Aide sur la version de Qt utilisée
		*/
    void about_qt();

		/**
		@brief A propo du logiciel
		*/
		void about();

		/**
		@brief ouvre une fenetre avec les conseils
		*/
		void hints();

	private slots:
		void s_removeLinks(QCVModuleHandler*);
		void s_reload_module();
		void s_updateMdi();
		void forceHints();

  private:

    //Fonctions de créations de l'interface appelées dans le constructeur.
    void create_widgets();
    void create_actions();
    void connect_signals2slots();
    
    //Elements de l'interface
    QMyMdiArea * mdiArea;                         //contient la liste des modules
    QToolBar * tb_modules;
    QAction * a_add_module;
    QAction * a_remove_module;
    QAction * a_cascade_modules;
    QAction * a_tile_modules;
    QAction * a_open_project;
    QAction * a_save_project;
    QAction * a_close_project;
    QAction * a_quit;
    QAction * a_about;
		QAction * a_about_qt;
    QAction * a_remove_selected_links;
		QAction * a_reload_module;
		QAction * a_refresh;
		QAction * a_hints;

    QMenu * menu_file;
    QMenu * menu_modules;
		QMenu * menu_view;
		QMenu * menu_help;
    
  protected:
    void closeEvent(QCloseEvent * event);      
		void dropEvent ( QDropEvent * event );
		void dragEnterEvent(QDragEnterEvent *event);
};

#endif
